<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>Pony 教程  | 概述（Overview）</title>
    <meta name="HandheldFriendly" content="True">
    <meta name="MobileOptimized" content="320">

    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="generator" content="Hugo 0.69.0-DEV" />
    
    
      <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    

    <style>
      @font-face {
        font-family: 'Icon';
        src: url('/pony-tutorial/dist/fonts/icon.eot?52m981');
        src: url('/pony-tutorial/dist/fonts/icon.eot?#iefix52m981')
               format('embedded-opentype'),
             url('/pony-tutorial/dist/fonts/icon.woff?52m981')
               format('woff'),
             url('/pony-tutorial/dist/fonts/icon.ttf?52m981')
               format('truetype'),
             url('/pony-tutorial/dist/fonts/icon.svg?52m981#icon')
               format('svg');
        font-weight: normal;
        font-style: normal;
      }
    </style>

    <link href="/pony-tutorial/dist/css/app.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/highlight.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/icon.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/pony.css" rel="stylesheet">

    

    
      
    

    
      <link href="https://damon-kwok.github.io/pony-tutorial/appendices/index.xml" rel="alternate" type="application/rss+xml" title="Pony 教程" />
      <link href="https://damon-kwok.github.io/pony-tutorial/appendices/index.xml" rel="feed" type="application/rss+xml" title="Pony 教程" />
    

    <meta property="og:title" content="概述（Overview）" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://damon-kwok.github.io/pony-tutorial/appendices.html" />

<meta itemprop="name" content="概述（Overview）">
<meta itemprop="description" content=""><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="概述（Overview）"/>
<meta name="twitter:description" content=""/>

  </head>

  <body class="ma0 avenir bg-near-white">

    

  <header>
    <div class="bg-pony-brown">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="https://damon-kwok.github.io/pony-tutorial/" class="f3 fw2 hover-white no-underline white-90 dib">
      Pony 教程
    </a>
    <div class="flex-l items-center">
      
      
<div hidden>
  <span id="new-window-0">Opens in a new window</span>
  <span id="new-window-1">Opens an external site</span>
  <span id="new-window-2">Opens an external site in a new window</span>
</div>



<a href="https://www.twitter.com/ponylang" target="_blank" class="link-transition twitter link dib z-999 pt3 pt0-l mr1" title="Twitter link" rel="noopener" aria-describedby="new-window-0">
  <svg height="32px"  style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M37.167,22.283c-2.619,0.953-4.274,3.411-4.086,6.101  l0.063,1.038l-1.048-0.127c-3.813-0.487-7.145-2.139-9.974-4.915l-1.383-1.377l-0.356,1.017c-0.754,2.267-0.272,4.661,1.299,6.271  c0.838,0.89,0.649,1.017-0.796,0.487c-0.503-0.169-0.943-0.296-0.985-0.233c-0.146,0.149,0.356,2.076,0.754,2.839  c0.545,1.06,1.655,2.097,2.871,2.712l1.027,0.487l-1.215,0.021c-1.173,0-1.215,0.021-1.089,0.467  c0.419,1.377,2.074,2.839,3.918,3.475l1.299,0.444l-1.131,0.678c-1.676,0.976-3.646,1.526-5.616,1.568  C19.775,43.256,19,43.341,19,43.405c0,0.211,2.557,1.397,4.044,1.864c4.463,1.377,9.765,0.783,13.746-1.568  c2.829-1.673,5.657-5,6.978-8.221c0.713-1.716,1.425-4.851,1.425-6.354c0-0.975,0.063-1.102,1.236-2.267  c0.692-0.678,1.341-1.419,1.467-1.631c0.21-0.403,0.188-0.403-0.88-0.043c-1.781,0.636-2.033,0.551-1.152-0.402  c0.649-0.678,1.425-1.907,1.425-2.267c0-0.063-0.314,0.042-0.671,0.233c-0.377,0.212-1.215,0.53-1.844,0.72l-1.131,0.361l-1.027-0.7  c-0.566-0.381-1.361-0.805-1.781-0.932C39.766,21.902,38.131,21.944,37.167,22.283z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4  s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/></svg>

<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000" width="8px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/>
</svg>
</span></a>





<a href="https://github.com/damon-kwok/pony-tutorial-zh_CN" target="_blank" class="link-transition github link dib z-999 pt3 pt0-l mr1" title="Github link" rel="noopener" aria-describedby="new-window-0">
  <svg  height="32px"  style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>

<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000" width="8px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/>
</svg>
</span></a>



    </div>
  </div>
</nav>

    </div>
  </header>


    <main role="main">
      
  <article class="w-100 ph4 pb5 pb6-ns pt1 pt5-ns">
    <div class="order-0 w-20 dn db-l doc-menu" id="doc-menu">
      <div class="order-0 w-20 mt2 mb2" id="search-wrapper">
  <input id="search-box" type="search" placeholder="search" />
</div>

      
<nav role="navigation">
  <ul class="list pa0 nl2">
    
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".getting-started">入门（Getting Started）</a>
        <ul class="getting-started desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/what-you-need.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              准备工作（What You Need）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/hello-world.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Hello World
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/how-it-works.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              庖丁解牛
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".types">类型系统（Types）</a>
        <ul class="types desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/types.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/at-a-glance.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型系统概览
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/classes.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类（Classes）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/primitives.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              基元类（Primitives）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/actors.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              并发单元（Actors）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/traits-and-interfaces.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              特征和接口（Traits and Interfaces）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/structs.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              结构体（Structs）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/type-aliases.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型别名（Type Aliases）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/type-expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型表达式（Type Expressions）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".expressions">表达式（Expressions）</a>
        <ul class="expressions desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/literals.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              字面量（Literals）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/variables.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              变量（Variables）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/ops.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              运算符（Operators）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/arithmetic.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              算术运算符（Arithmetic）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/control-structures.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              流程控制（Control Structures）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/methods.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              方法（Methods）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/errors.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              异常处理（Errors）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/equality.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              比较（Equality in Pony）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/sugar.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              语法糖（Sugar）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/object-literals.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              匿名对象（Object Literals）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/partial-application.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              柯里化（Partial Application）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".reference-capabilities">引用权能（Reference Capabilities）</a>
        <ul class="reference-capabilities desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              引用权能（Reference Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/guarantees.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能约束（Reference Capability Guarantees）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/consume-and-destructive-read.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能转让和破坏性读取（Consume and Destructive Read）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/recovering-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能借用（Recovering Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/aliasing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              别名引用（Aliasing）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/passing-and-sharing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Passing and Sharing References
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/capability-subtyping.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能包含关系（Capability Subtyping）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/combining-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能合并（Combining Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/arrow-types.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              箭头的用法（Arrow Types aka Viewpoints）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/capability-matrix.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能矩阵（Reference Capability Matrix）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".object-capabilities">对象权能模型（Object Capabilities）</a>
        <ul class="object-capabilities desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities/object-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              对象权能模型（Object Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities/trust-boundary.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              边界信任（Trust Boundary）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".pattern-matching">模式匹配（Pattern Matching）</a>
        <ul class="pattern-matching desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching/match.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              匹配表达式（Match Expressions）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching/as.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              as操作符（As Operator）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".generics">泛型（Generics）</a>
        <ul class="generics desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics/generics-and-reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              泛型和引用权能（Generics and Reference Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics/generic-constraints.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              泛型约束（Constraints）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".packages">包（Packages）</a>
        <ul class="packages desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/package-system.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              包机制（Package System）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/use-statement.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              包的使用方式（Use Statement）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/standard-library.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              标准库（Standard Library）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".testing">测试（Testing）</a>
        <ul class="testing desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/testing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/testing/ponytest.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Testing with Ponytest
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".c-ffi">C FFI</a>
        <ul class="c-ffi desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/calling-c.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Calling C from Pony
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/linking-c.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Linking to C Libraries
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/c-abi.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              C ABI
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/callbacks.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Callbacks
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".gotchas">陷阱（Gotchas）</a>
        <ul class="gotchas desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/divide-by-zero.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Divide by Zero
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/garbage-collection.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Garbage Collection
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/scheduling.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Scheduling
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/side-effect-ordering-in-function-call-expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Function Call Side Effects
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/recursion.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Recursion
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".where-next">下一步？（Where Next?）</a>
        <ul class="where-next desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/where-next.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2  primary-color" data-target=".appendices">附录（Appendices）</a>
        <ul class="appendices desktopmenu animated fadeIn list pl0 bg-light-gray db">
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 primary-color ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/ponypath.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              PONYPATH
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/lexicon.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Lexicon
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/symbol-lookup-cheatsheet.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Symbol Lookup Cheatsheet
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/keywords.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Keywords
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/examples.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Examples
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/whitespace.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Whitespace
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/compiler-args.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Compiler Arguments
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/memory-allocation.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Memory Allocation at Runtime
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/garbage-collection.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Garbage Collection with Pony-ORCA
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/platform-dependent-code.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Platform-dependent code
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/error-messages.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              A Short Guide to Pony Error Messages
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/annotations.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Program Annotations
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/serialisation.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Serialisation
            </a>
          </li>
        </ul>
      </li>
  </ul>
</nav>

    </div>
    <div class="flex-l" id="the-body">
      <div class="order-1 w-60-l mw9 ph0 ph5-ns mid-gray nested-copy-line-height no-underline nested-links nested-img nested-copy-seperator nested-blockquote mt0-ns" style="flex-grow:1;">
        <div class="order-0 mt4 w-100 center mw7" style="clear: both;">
          <a id="doc-menu-toggle" class="icon icon-menu" href="javascript:void(0)" onClick="hideShowDM()"></a>
        </div>
        <div class="documentation-copy center mw7" id="content">
          <header class="mt4 w-100">
            <p class="f6 b helvetica tracked">
                
              APPENDICES
            </p>
            <h1 class="f1 athelas mb1">概述（Overview）</h1>
          </header>

          <main class="nested-copy-line-height lh-copy serif f4 nested-links nested-img mid-gray pr4-l"><p>Welcome to the appendix; the land of misshapen and forgotten documentation. Ok, not really forgotten just&hellip; &lsquo;lesser&rsquo; sounds wrong. Some of this material could get some loving and be promoted to a full chapter, some are always going to be an appendix, some might be worthy of a short book unto itself. Right now though it lives here, have a look through. You&rsquo;ll find a lexicon of standard Pony terminology, a symbol lookup cheat sheet that can help you locate documentation on all our funny symbols like ^, ! and much more.</p>





          </main>

    <section class="flex-ns flex-wrap justify-around mt5">
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/ponypath.html" class="link black dim">
        PONYPATH
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>When searching for Pony packages, ponyc checks both the installation directory (where the standard libraries reside) and any directories listed in the optional environment variable PONYPATH.
Adding to PONYPATH Assuming you just placed new Pony code under a directory called pony in your home directory here is how to inform ponyc that the directory contains Pony code via adding it to PONYPATH.
Unix/Mac Edit/add the &ldquo;rc&rdquo; file corresponding to your chosen shell (echo $SHELL will tell you what shell you are running).</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/lexicon.html" class="link black dim">
        Lexicon
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Words are hard. We can all be saying the same thing but do we mean the same thing? It&rsquo;s tough to know. Hopefully, this lexicon helps a little.
Terminology Braces: { }. Synonymous with curly brackets.
Brackets: This term is ambiguous. In the UK it usually means ( ) in the US is usually means [ ]. It should, therefore, be avoided for use for either of these. Can be used as a general term for any unspecified grouping punctuation, including { }.</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/symbol-lookup-cheatsheet.html" class="link black dim">
        Symbol Lookup Cheatsheet
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Pony, like just about any other programming language, has plenty of odd symbols that make up its syntax. If you don&rsquo;t remember what one means, it can be hard to search for them. Below you&rsquo;ll find a table with various Pony symbols and what you should search the tutorial for in order to learn more about the symbol.
   Symbol Search Keywords     ! Alias   -&gt; Arrow type, viewpoint   .</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/keywords.html" class="link black dim">
        Keywords
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>This listing explains the usage of every Pony keyword.
   Keyword Usage     actor defines an actor   as conversion of a value to another Type (can raise an error)   be behavior, executed asynchronously   box default reference capability – object is readable, but not writable   break to step out of a loop statement   class defines a class   compile_error will provoke a compile error   compile_intrinsic implementation is written in C and not available as Pony code   continue continues a loop with the next iteration   consume move a value to a new variable, leaving the original variable empty   digestof create a USize value that summarizes the Pony object, similar to a Java object&rsquo;s hashCode() value.</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/examples.html" class="link black dim">
        Examples
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Small how do I examples for Pony. These will eventually find another home. Until then, they live here.
Enum with values primitive Black fun apply(): U32 =&gt; 0xFF000000 primitive Red fun apply(): U32 =&gt; 0xFFFF0000 Enum with values with namespace primitive Colours fun black(): U32 =&gt; 0xFF000000 fun red(): U32 =&gt; 0xFFFF0000 Enum which can be iterated primitive Black primitive Blue primitive Red primitive Yellow type Colour is (Black | Blue | Red | Yellow) primitive ColourList fun tag apply(): Array[Colour] =&gt; [Black; Blue; Red; Yellow] for colour in ColourList().</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/whitespace.html" class="link black dim">
        Whitespace
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Whitespace (e.g. spaces, tabs, newlines, etc.) in Pony isn&rsquo;t significant.
Well, it mostly isn&rsquo;t significant.
Mostly insignificant whitespace Pony reads a bit like Python, which is a whitespace significant language. That is, the amount of indentation on a line means something in Python. In Pony, the amount of indentation is meaningless.
That means Pony programmers can format their code in whatever way suits them.
There are three exceptions:
 A - at the beginning of a line starts a new expression (unary negation), whereas a - in the middle of an expression is a binary operator (subtraction).</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/compiler-args.html" class="link black dim">
        Compiler Arguments
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>ponyc, the compiler, is usually called in the project directory, where it finds the .pony files and its dependencies automatically. There it will create the binary based on the directory name. You can override this and tune the compilation with several options as described via ponyc --help and you can pass a separate source directory as an argument.
ponyc [OPTIONS] &lt;package directory&gt; The most useful options are --debug, --path or just -p, --output or just -o and --docs or -g.</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/memory-allocation.html" class="link black dim">
        Memory Allocation at Runtime
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Pony is a null-free, type-safe language, with no dangling pointers, no buffer overruns, but with a very fast garbage collector, so you don&rsquo;t have to worry about explicit memory allocation, if on the heap or stack, if in a threaded actor, or not.
Fast, Safe and Cheap  An actor has ~240 bytes of memory overhead. No locks. No context switches. All mutation is local. An idle actor consumes no resources (other than memory).</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/garbage-collection.html" class="link black dim">
        Garbage Collection with Pony-ORCA
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Pony-ORCA is a fully concurrent protocol for garbage collection in the actor paradigm. It allows cheap and small actors to perform garbage collection concurrently with any number of other actors, and this number can go into the millions since one actor needs only 256 bytes on 64bit systems. It does not require any form of synchronization across actors except those introduced through the actor paradigm, i.e. message send and message receive.</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/platform-dependent-code.html" class="link black dim">
        Platform-dependent code
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>The Pony libraries, of course, want to abstract platform differences. Sometimes you may want a use command that only works under certain circumstances, most commonly only on a particular OS or only for debug builds. You can do this by specifying a condition for a use command:
use &quot;foo&quot; if linux use &quot;bar&quot; if (windows and debug) Use conditions can use any of the methods defined in builtin/Platform as conditions. There are currently the following booleans defined: freebsd, linux, osx, posix =&gt; (freebsd or linux or osx), windows, x86, arm, lp64, llp64, ilp32, native128, debug</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/error-messages.html" class="link black dim">
        A Short Guide to Pony Error Messages
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>You&rsquo;ve been through the tutorial, you&rsquo;ve watched some videos, and now you&rsquo;re ready to write some Pony code. You fire up your editor, shovel coal into the compiler, and&hellip; you find yourself looking at a string of gibberish.
Don&rsquo;t panic! Pony&rsquo;s error messages try to be as helpful as possible and the ultimate goal is to improve them further. But, in the meantime, they can be a little intimidating.
This section tries to provide a short bestiary of Pony&rsquo;s error messages, along with a guide to understanding them.</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/annotations.html" class="link black dim">
        Program Annotations
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>In Pony, we provide a special syntax for implementation-specific annotations to various elements of a program. The basic syntax is a comma-separated list of identifiers surrounded by backslashes:
\annotation1, annotation2\ Here, annotation1 and annotation2 can be any valid Pony identifier, i.e. a sequence of alphanumeric characters starting with a letter or an underscore.
What can be annotated Annotations are allowed after any scoping keyword or symbol. The full list is:</p>
      
    </div>
  </div>
</div>
</div>
      
        <div class="relative w-100 mb4 bg-white"><div class="relative w-100 mb4 bg-white nested-copy-line-height">
  <div class="bg-white mb3 pa4 gray overflow-hidden">
    <h1 class="f3 near-black">
      <a href="/pony-tutorial/appendices/serialisation.html" class="link black dim">
        Serialisation
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      
        <p>Pony provides a built-in mechanism for serialising and deserialising objects so that they can be passed between Pony processes. Serialisation takes an object and turns it into an array of bytes that can be used to send the object to another process by, for example, writing it to a TCP stream. Deserialisation takes an array of bytes and turns them into a Pony object.
Pony uses an intermediate object type called Serialised to represent a serialised object.</p>
      
    </div>
  </div>
</div>
</div>
      
    </section>
        </div>
        <div id="search-results" class="center mw7 dn"></div>
      </div>
    </div>
  </article>

    </main>
    

<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/languages/pony.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min.js"></script>

<script async defer src="https://buttons.github.io/buttons.js"></script>

<script>
  var toggleBtns = document.getElementsByClassName('js-toggle')
  for (var i = 0; i < toggleBtns.length; i++) {
    toggleBtns[i].addEventListener('click', toggleClass, false)
  }

  var myToggleBtns = document.getElementsByClassName('hide-show-toggle')
  for (var i = 0; i < myToggleBtns.length; i++) {
    myToggleBtns[i].addEventListener('click', hideShow, false)
  }

function hideShowDM() {
  var menu = document.getElementById("doc-menu")
  var thebody = document.getElementById("the-body")
  if (window.getComputedStyle(menu).display == "none") {
    menu.style.display = "block";
    thebody.style.left = "300px";
  } else {
    menu.style.display = "none";
    thebody.style.left = "0px";
  }
}

function hideShowCM() {
  var menu = document.getElementById("context-menu")
  if (window.getComputedStyle(menu).display == "none") {
    menu.style.display = "block";
  } else {
    menu.style.display = "none";
  }
}

function toggleClass() {
  
  var content = this.dataset.target.split(' ')
  
  var mobileCurrentlyOpen = document.querySelector('.mobilemenu:not(.dn)')
  var desktopCurrentlyOpen = document.querySelector('.desktopmenu:not(.dn)')
  var desktopActive = document.querySelector('.desktopmenu:not(.dn)')

  
  for (var i = 0; i < content.length; i++) {
    var matches = document.querySelectorAll(content[i]);
    
    [].forEach.call(matches, function(dom) {
        dom.classList.contains('dn') ?
        dom.classList.remove('dn') :
        dom.classList.add('dn');
         return false;
       });
        
      if (mobileCurrentlyOpen) mobileCurrentlyOpen.classList.add('dn')
      if (desktopCurrentlyOpen) desktopCurrentlyOpen.classList.add('dn')
      if (desktopActive) desktopActive.classList.remove('db')

    }
  }

var Pony = {};


Pony.Search = (function() {
  var that = {}
  that.lunrIndex = undefined;
  that.pages = [];

  that.doSearch = function(query) {
    var resultsContainer = $('#search-results');
    var contentContainer = $('#content');
    
    var results = this.lunrIndex.search(query).map(function(result) {
      
        return {
            page: that.pages[result.ref],
            metadata: result.matchData.metadata
        };
    });

    
    resultsContainer.empty();
    resultsContainer.append(
        $("<header>", {class: "mt4 w-100"}).append(
            $("<p>", {class: "f6 b helvetica tracked", text: "SEARCH RESULTS"}))
    );
    var resList = $("<ul>", {id: "search-result-list"});

    
    results.slice(0, 100).forEach(function(result) {
        var res = $("<li>");
        var div = $("<div>", {class: "search-result"});
        div.append($("<a>", {
          href: result.page.uri,
          text: result.page.title,
          class: "search-result-title"
        }));
        var p = $("<p>", {
            class: "search-result-summary"
        });
        var highlighted = that.highlightResult(result.page.summary, result.metadata);
        p.append(highlighted);
        div.append(p);
        res.append(div);
        resList.append(res);
    });
    resultsContainer.append(resList);

    
    contentContainer.addClass("dn");
    resultsContainer.removeClass("dn");
  };

  that.highlightResult = function(text, metadata) {
      var span = $("<span>");
      for (var key in metadata) {
        var summary_metadata = metadata[key]["summary"];
        if (summary_metadata !== undefined && summary_metadata["position"] !== undefined) {
            var position_metadata = summary_metadata["position"];
            var last_pos = 0;
            summary_metadata["position"].forEach(function(elem) {
                span.append(
                    $("<span>", {text: text.slice(last_pos, elem[0])})
                );
                span.append(
                    $("<span>", {
                        class: "highlighted",
                        text: text.slice(elem[0], elem[0] + elem[1])})
                );
                last_pos = elem[0] + elem[1];
            });
            span.append(
                $("<span>", {text: text.slice(last_pos, text.length)})
            );
        } else {
          span.text(text);
        }
      }
      return span;
  };

  that.initLunr = function(onSuccess) {
      $.getJSON("/index.json")
        .done(function(index) {
           
           that.pages = index;
           that.lunrIndex = lunr(function() {
             this.metadataWhitelist = ['position']; 
             this.field("title", { boost: 10 });
             this.field("tags", { boost: 5 });
             this.field("categories", { boost: 5 });
             this.field("content");
             this.field("summary", {boost: 0});
             this.ref("i");

             index.forEach(function (page, idx) {
                 page["i"] = idx;
                 this.add(page)
               },
               this
             );
           });
           onSuccess();
        })
        .fail(function(jqxhr, textStatus, error) {
          var err = textStatus + ", " + error;
          console.error("Error getting search index file:", err);
        });
    }
  that.setUpSearchUI = function() {
    $('#search-box').keyup(function() {
        var query = $(this).val();
        if (query.length < 2) {
            if (query.length == 0) {
                $('#content').removeClass('dn');
                $('#search-results').empty().addClass('dn');
            }
            return;
        }
        if (that.lunrIndex === undefined) {
            that.initLunr(function () {
              that.doSearch(query);
            });
        } else {
            that.doSearch(query);
        }
    });
  }
  return that;
})();




$(document).ready(function() {
  Pony.Search.setUpSearchUI();
});
</script>

  </body>
</html>
